package com.zxy.demo.delay.pojo;

import com.zxy.demo.delay.DelayTaskManager;
import com.zxy.demo.redis.RedisUtil;
import com.zxy.demo.spring.SpringContextUtils;

/**
 * 自定义的任务类对象
 * @author ZENG.XIAO.YAN
 * @date   2018年6月7日
 * 
 */
public class MyTask extends BaseDelayTask {

	/** serialVersionUID */
	private static final long serialVersionUID = -3110381573210763154L;
	private String beanName;
	private static RedisUtil redisUtil;
	/** 静态代码块的方式给 redisUtil赋值 */
	static {
		if (null == redisUtil) {
			redisUtil = SpringContextUtils.getBean(RedisUtil.class);
		}
	}

	public String getBeanName() {
		return beanName;
	}

	public void setBeanName(String beanName) {
		this.beanName = beanName;
	}

	@Override
	public void runTask() {
		System.out.println("时间到了执行任务" + this.getId());
		redisUtil.incr("testWork", 1);// 每执行一个任务，在redis里面新增1，可用于和自增长id的值对比，如果这个值比id的值小，说明有任务丢失了
		
	}

	@Override
	public void deleteTaskOnRedis() {
		/** 必须要在这里删除redis里面任务对象，任务执行完后redis里面的任务才被删除 */
		redisUtil.hdel(DelayTaskManager.TASK_REDIS_KEY, String.valueOf(this.getId()));
	}

	@Override
	public boolean checkTaskExistOnRedis() {
		return redisUtil.hHasKey(DelayTaskManager.TASK_REDIS_KEY, String.valueOf(this.getId()));
	}

	@Override
	public String lockKey() {
		return "TaskLock_" + getId();
	}
	
	
}
